﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace proyectoENS
{
    public sealed partial class frmAsistencia : Form
    {
        private int idCurso = 0;
        private List<AsistenciaClases> asistencias = new List<AsistenciaClases>();
        private static frmAsistencia Instancia;
        public static frmAsistencia onlyInstancia
        {
            get 
            {
                if (Instancia == null || Instancia.IsDisposed)
                    Instancia = new frmAsistencia();
                return Instancia;
            }
        }
        private frmAsistencia()
        {
            InitializeComponent();
            cbxAño.DataSource = DALCursos.getAños();
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            idCurso =(int)((Cursos)cbxDivision.SelectedItem).idCurso;
            crearDataGrid();
            cargarDataGrid();
            pintarDataGrid();

                      
        }
        private void crearDataGrid()
        {
            dgvAsistencia.Rows.Clear();
            dgvAsistencia.Columns.Clear();
            dgvAsistencia.RowHeadersVisible = true;
            
            DataGridViewColumn columnIdAlumno = new DataGridViewColumn();
            columnIdAlumno.HeaderText = "Alumno";
            columnIdAlumno.CellTemplate = new DataGridViewTextBoxCell();
            columnIdAlumno.Name = "idAlumno";
            columnIdAlumno.Visible = false;
            columnIdAlumno.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgvAsistencia.Columns.Add(columnIdAlumno);

            DataGridViewColumn columnAlumno = new DataGridViewColumn();
            columnAlumno.HeaderText = "Alumno";
            columnAlumno.CellTemplate = new DataGridViewTextBoxCell();
            columnAlumno.Name = "alumno";
            columnAlumno.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            columnAlumno.ReadOnly = true;
            
            dgvAsistencia.Columns.Add(columnAlumno);

            
            
            DataGridViewColumn asistencia = new DataGridViewColumn();
            asistencia.HeaderText = DateTime.Now.Date.ToShortDateString();
            asistencia.CellTemplate = new DataGridViewTextBoxCell();
            asistencia.Name = "asistencia";
            asistencia.DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
            //asistencia.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgvAsistencia.Columns.Add(asistencia);

            DataGridViewColumn inasistencias = new DataGridViewColumn();
            inasistencias.HeaderText = "Inasistencias";
            inasistencias.CellTemplate = new DataGridViewTextBoxCell();
            inasistencias.Name = "inasistencias";
            inasistencias.DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
            //inasistencias.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            inasistencias.ReadOnly = true;
            dgvAsistencia.Columns.Add(inasistencias);
        }
        private void cargarDataGrid()
        {
            foreach (Alumnos item in DALAlumnos.getAlumnosByIdCurso(idCurso))
            {
                string[] temp = new string[4];
                temp[0] = item.id.ToString();
                temp[1] = item.Apellidos + ", " + item.nombres;
                if (DALAsistencias.getAsistenciaByAlumno(item.id) != null)
                    temp[2] = ((AsistenciaClases)DALAsistencias.getAsistenciaByAlumno(item.id)).asistencia.ToString();
                else
                    temp[2] = "A";
                temp[3] = DALAsistencias.getCantidadInasistencias(item.id).ToString();
                dgvAsistencia.Rows.Add(temp);
            }
            dgvAsistencia.Refresh();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow item in dgvAsistencia.Rows)
            {
                AsistenciaClases ac = new AsistenciaClases();
                ac.fecha = DateTime.Now.Date;
                ac.asistencia = item.Cells[2].Value.ToString();
                ac.idAlumno = int.Parse(item.Cells[0].Value.ToString());
                asistencias.Add(ac);
            }
            DALAsistencias.registrarAsistenciasClases(asistencias);
             DialogResult result = new DialogResult();
            if (DALAsistencias.alumnosLibresPrimeraVezByCurso(idCurso).Count > 0)
                result = MessageBox.Show("Algunos alumnos han superado el limite de faltas, ¿Desea ver los detalles?", "Atención", MessageBoxButtons.YesNo);
            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                frmAlumnosLibres.onlyInstancia.ShowDialog();
            }
        }

        private void dgvAsistencia_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvAsistencia.CurrentRow.Cells[e.ColumnIndex].Value == null)
                dgvAsistencia.CurrentRow.Cells[e.ColumnIndex].Value = dgvAsistencia.CurrentRow.Cells[e.ColumnIndex].Value = "A";
            string value = dgvAsistencia.CurrentRow.Cells[e.ColumnIndex].Value.ToString();
            if (!(value == "p" || value == "P" || value == "a" || value == "A" || value == "t" || value == "T"))
            {
                MessageBox.Show("Solo se adminten las letras P, A y T (Presente, Ausente o Tardanza)");
                dgvAsistencia.CurrentRow.Cells[e.ColumnIndex].Value = null;
            }
            else
            {
                dgvAsistencia.CurrentRow.Cells[e.ColumnIndex].Value = dgvAsistencia.CurrentRow.Cells[e.ColumnIndex].Value.ToString().ToUpper();
                dgvAsistencia.Refresh();
            }
        }

        private void frmAsistencia_Load(object sender, EventArgs e)
        {
            //DALAlumnos.getLibres(1);
        }

        private void cbxAño_SelectedIndexChanged(object sender, EventArgs e)
        {
            int tmp = int.Parse(cbxAño.SelectedValue.ToString());
            cbxDivision.DataSource = DALCursos.getDivisiones(tmp);
        }
        private void pintarDataGrid()
        {
            int limiteAviso = (int)DALConfiguraciones.getConfiguracion("cantidad faltas 1er aviso").int1;
            foreach (DataGridViewRow item in dgvAsistencia.Rows)
            {
                if (item.Cells[3].Value != null)
                {
                    if ((int.Parse(item.Cells[3].Value.ToString()) > limiteAviso))
                        item.Cells["inasistencias"].Style.BackColor = Color.OrangeRed;
                }
            }
            dgvAsistencia.Refresh();
        }
        private void cbxDivision_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

    }
}
